package main.objet;

import main.Coordonnees;
import main.Equipe;
import java.awt.*;

//import javax.swing.*;

public class Joueur extends Objet2D {

    int LONGEUR = 600;
    int LARGEUR = 400;

    private TypeFrappe typeFrappe = TypeFrappe.NE_FRAPPE_PAS;
    private Cote cote;
    private Rectangle limiteFrappe; // rectangle dans lequel la frappe est
    // prise en compte
    private Service service;
    private Equipe equipe;
    private int numJoueur;
    
    public void setNumJoueur(int num){
    	this.numJoueur = num;
    }
    
    public int getNumJoueur(){
    	return this.numJoueur;
    }
    
    public void setEquipe(Equipe equipe) {
	this.equipe = equipe;
    }

    public Equipe getEquipe() {
	return equipe;
    }

    public static enum TypeFrappe {
	NE_FRAPPE_PAS, FRAPPE_BASSE, FRAPPE_HAUTE, TOUCHE_ENFONCEE
    }

    public static enum Cote {
	GAUCHE, DROITE
    }

    public static enum Service {
	PAS_AU_SERVICE, SERVICE_HAUT, SERVICE_BAS, SERVEUR_HAUT, SERVEUR_BAS
    }

    public Joueur() {
	super();

	// this.getCadre().setPreferredSize(new Dimension(12,20));
    }

    public Joueur(Coordonnees position, Coordonnees vitesse) {
	super(position, vitesse);
    }

    public Joueur(Cote cote) {
	this.cote = cote;
	this.limiteFrappe = new Rectangle(20, 25);
    }

    public Rectangle getLimiteFrappe() {
	return this.limiteFrappe;
    }

    public void setService(Service service) {
	this.service = service;
    }

    public Service getService() {
	return this.service;
    }

    public void setTypeFrappe(TypeFrappe type) {
	this.typeFrappe = type;
    }

    public TypeFrappe getTypeFrappe() {
	return this.typeFrappe;
    }

    public void setCote(Cote cote) {
	this.cote = cote;

    }

    public Cote getCote() {
	return this.cote;
    }

    public void initPositionNormale(char position) { // position == 'h' ou 'b'

	this.setPosition((cote == Cote.GAUCHE ? 100 : 450),
		(position == 'h' ? 150 : 250));

    }

    public void initPositionService() {

	this.setPosition((cote == Cote.GAUCHE ? 50 : 540),
		(this.service == Service.SERVICE_HAUT ? 150 : 250));

    }

    public void seDeplacer() {
	int x = this.getPosition().getX();
	int y = this.getPosition().getY();
	int Vx = this.getVitesse().getX();
	int Vy = this.getVitesse().getY();
	int newX = x + Vx;
	int newY = y + Vy;
	if (this.service == Service.PAS_AU_SERVICE) {
	    if (((newX + 10) < (this.cote == Cote.DROITE ? LONGEUR : 300))
		    & (newX > (this.cote == Cote.DROITE ? 300 : 0))
		    & ((newY + (this.cote == Cote.DROITE ? 10 : 20)) < LARGEUR)
		    & (newY - (this.cote == Cote.DROITE ? 10 : 0) > 0)) {
		this.setPosition(newX, newY);
		this.limiteFrappe.setLocation(newX - 10, newY
			+ (this.cote == Cote.DROITE ? -18 : 3));
	    }
	} else if (this.service == Service.SERVICE_HAUT) {
	    if (((newX) <= (this.cote == Cote.DROITE ? 540 : 50))
		    & (newX > (this.cote == Cote.DROITE ? 539 : 49))
		    & ((newY + 10) < 200) & (newY > 90)) {
		this.setPosition(newX, newY);
		this.limiteFrappe.setLocation(newX - 10, newY
			+ (this.cote == Cote.DROITE ? -18 : 3));
	    }
	} else if (this.service == Service.SERVICE_BAS) {
	    if (((newX) <= (this.cote == Cote.DROITE ? 540 : 50))
		    & (newX > (this.cote == Cote.DROITE ? 539 : 49))
		    & ((newY + 10) < 310) & (newY > 200)) {
		this.setPosition(newX, newY);
		this.limiteFrappe.setLocation(newX - 10, newY
			+ (this.cote == Cote.DROITE ? -18 : 3));
	    }
	}

	// this.getCadre().setLocation(this.getPosition().getX(),
	// this.getPosition().getY());
	// this.getCadre().repaint();
    }

    public void seDessiner(Graphics g) {

	// Graphics g = this.getCadre().getGraphics();
	if (this.cote == Cote.GAUCHE) {
	    g.setColor(Color.red);
	} else {
	    g.setColor(Color.blue);
	}
	// g.fillOval(2,0,10,10);
	g
		.fillOval(this.getPosition().getX(), this.getPosition().getY(),
			10, 10);
	g.setColor(Color.black);
	if (typeFrappe == TypeFrappe.NE_FRAPPE_PAS) {
	    // g.drawLine(7, 10, 7, 20);
	    if (this.cote == Cote.GAUCHE) {
		g.drawLine(this.getPosition().getX() + 5, this.getPosition()
			.getY() + 10, this.getPosition().getX() + 5, this
			.getPosition().getY() + 20);
	    } else {
		g.drawLine(this.getPosition().getX() + 5, this.getPosition()
			.getY(), this.getPosition().getX() + 5, this
			.getPosition().getY() - 10);
	    }
	} else if (typeFrappe == TypeFrappe.TOUCHE_ENFONCEE) {
	    // g.drawLine(7, 10, 0, 17);
	    if (this.cote == Cote.GAUCHE) {
		g.drawLine(this.getPosition().getX() + 5, this.getPosition()
			.getY() + 10, this.getPosition().getX() - 2, this
			.getPosition().getY() + 17);
	    } else {
		g.drawLine(this.getPosition().getX() + 5, this.getPosition()
			.getY(), this.getPosition().getX() + 12, this
			.getPosition().getY() - 7);
	    }
	}

    }
}